#include "Scalar.h"

Scalar::Scalar()
{
}

Scalar::Scalar(double scalar): value(scalar)
{
}

Scalar::Scalar(int scalar)
{
	value = (double) scalar;
}

Scalar::Scalar(const Scalar& rhs): value(rhs.value)
{
}

Scalar::~Scalar()
{
}

int Scalar::GetInt() const
{
	return (int) value;
}

void Scalar::Add(const Scalar& scalar)
{
	value += scalar.value;
}

void Scalar::Substract(const Scalar& scalar)
{
	value -= scalar.value;
}

void Scalar::Multiply(const Scalar& scalar)
{
	value *= scalar.value;
}

void Scalar::Divide(const Scalar& scalar)
{
	if((scalar.value < 10E-38) && (scalar.value > -10E-38))
		std::runtime_error("Division by 0");
	value /= scalar.value;
}

void Scalar::SetValue(const Scalar& scalar)
{
	value = scalar.value;
}

double Scalar::GetValue() const
{
	return value;
}

Scalar Scalar::Cosine()
{
	return cos(value);
}

Scalar Scalar::Sine()
{
	return sin(value);
}

Scalar Scalar::Sqrt()
{
	return sqrt(value);
}

Scalar Scalar::Abs()
{
	return fabs(value);
}

Scalar Scalar::operator+(const Scalar& rhs) const
{
	return value + rhs.value;
}

Scalar Scalar::operator-(const Scalar& rhs) const 
{
	return value - rhs.value;
}

Scalar Scalar::operator*(const Scalar& rhs) const
{
	return value * rhs.value;
}

Scalar Scalar::operator/(const Scalar& rhs) const
{
	if((rhs.value < 10E-38) && (rhs.value > -10E-38))
		std::runtime_error("Division by zero");
	return value / rhs.value;
}

Scalar Scalar::operator-()
{
	return -value;
}

Scalar Scalar::operator+=(const Scalar& rhs)
{
	value += rhs.value;
	return value;
}

Scalar Scalar::operator=(const Scalar& rhs)
{
	value = rhs.value;
	return value;
}

bool Scalar::operator<(const Scalar& rhs) const
{
	return value < rhs.value;
}